package inge_soft.gestoriusNuevo.persistence.DAO.implementation;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import inge_soft.gestoriusNuevo.persistence.DAO.abstraction.IActividadDAO;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Actividad;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Evento;

@Repository("actividadDAO")
public class ActividadDAO implements IActividadDAO {

	@PersistenceContext
	private EntityManager entityManager;
	
	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<Actividad> obtenerTodasActividades(Evento evento) throws DataAccessException {
		Query query = entityManager.createQuery("SELECT a FROM Actividad a WHERE a.evento = :evento");
		query.setParameter("evento", evento);
		return query.getResultList();
	}

	@Transactional(propagation = Propagation.MANDATORY)
	public void crearActividad(Evento evento, Actividad actividad) throws DataAccessException {
		actividad.setEvento(evento);
		entityManager.persist(actividad);
	}

	@Transactional(propagation = Propagation.MANDATORY)
	public void modificarActividad(Actividad actividad) throws DataAccessException {
		entityManager.merge(actividad);
	}

	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<Actividad> obtenerTodasActividades() throws DataAccessException {
		Query query = entityManager.createQuery("SELECT a FROM Actividad a");
		return query.getResultList();
	}

	@Transactional(readOnly = true)
	public Actividad obtenerPorId(Long id) throws DataAccessException {
		Query query = entityManager.createQuery("SELECT a FROM Actividad a WHERE a.id = :id");
		query.setParameter("id", id);
		return (Actividad) query.getSingleResult();
	}

	
}
